package com.letcode.primary.array;

public class Test02 {
    /*给定一个数组 prices ，其中 prices[i] 是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易（多次买卖一支股票）。

注意：你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。

作者：力扣 (LeetCode)
链接：https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2zsx1/
来源：力扣（LeetCode）
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。*/
    public static void main(String[] args) {

        int[] price={1,2,3,4,5};
        System.out.println(maxProfit(price));
    }
    public static int maxProfit(int[] prices) {
        int length = prices.length;
        if (length<2||prices==null) {
            return 0;
        }
        //持有
        int hode=-prices[0];
        //不持有
        int unhode=0;
        for (int i = 1; i <length ; i++) {
            /*
            * 当天交易完之后手里持有股票也有两种情况，一种是当天没有任何交易，又因为当天手里持有股票，所以当天手里持有的股票其实前一天就已经持有了。还一种是当天买入了股票，当天能买股票，说明前一天手里肯定是没有股票的，我们取这两者的最大值，所以可以得到
当天交易完之后手里没有股票可能有两种情况，一种是当天没有进行任何交易，又因为当天手里没有股票，所以当天没有股票的利润只能取前一天手里没有股票的利润。一种是把当天手里的股票给卖了，既然能卖，说明手里是有股票的，所以这个时候当天没有股票的利润要取前一天手里有股票的利润加上当天股票能卖的价格。这两种情况我们取利润最大的即可，所以可以得到


*/
            unhode=Math.max(hode+prices[i],unhode);
            hode=Math.max(hode,unhode-prices[i]);
        }
        return unhode;

    }
}
